/**
 * 
 */
package rer.persistencia;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import rer.model.Evento;

import rer.util.ConexaoJDBC_mysql;

/**
 * Persist�ncia dos dados no banco de dados
 * 
 * @author Jos� C M Rodrigues
 * @since 15/11/2014
 * @version 1.0
 */
public class EventosDAO implements IEventosDAO{

	// Vari�veis da classe
		private Statement statement;
		private PreparedStatement preparedStatement;
		private ResultSet resultSet;
		private String query;
		private Evento evento;
		private List<Evento> eventos;
		private Connection conexao = ConexaoJDBC_mysql.getConnection(); 
		
		
		/* (non-Javadoc)
		 * @see rer.persistencia.IEventosDAO#cadastrar(rer.model.Evento)
		 */
		@Override
		public Boolean cadastrar(Evento evento) {
			// TODO Auto-generated method stub
			try{
				
				query = "INSERT INTO db_ceirr.eventos (nomeEvento, dataEvento, valorEvento,custoEvento) VALUES (?,?,?,?)";
				
				preparedStatement = conexao.prepareStatement(query);
				preparedStatement.setString(1, evento.getNomeEvento());
				preparedStatement.setDate(2,new Date(evento.getDataEvento().getTime()));
				preparedStatement.setDouble(3, evento.getValorEvento());
				preparedStatement.setDouble(4, evento.getCustoEvento());
				//l
				preparedStatement.execute();
				
				return true;
				
			}catch(SQLException erro){
				System.out.println(erro.getMessage());
			}finally {
				
				try{
					preparedStatement.close();
					//System.out.println("\nStatement fechado");
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("\n Erro ao fechar o objeto statement.");
				}
			}
			
			return false;
		}
		/* (non-Javadoc)
		 * @see rer.persistencia.IEventosDAO#editar(int)
		 */
		@Override
		public Boolean editar(Evento evento) {
			// TODO Auto-generated method stub
			try{
				
				query = "UPDATE `eventos` SET `nomeEvento`=?,`dataEvento`=?,`valorEvento`=?,`custoEvento`=? WHERE idEventos = ?";
				
				preparedStatement = conexao.prepareStatement(query);
				preparedStatement.setString(1, evento.getNomeEvento());
				preparedStatement.setDate(2,new Date(evento.getDataEvento().getTime()));
				preparedStatement.setDouble(3, evento.getValorEvento());
				preparedStatement.setDouble(4, evento.getCustoEvento());
				preparedStatement.setInt(5, evento.getIdEvento());
				
				preparedStatement.executeUpdate();
				
				System.out.println("Dados evento Alterados com sucesso - DAO " + evento.getIdEvento() );
				return true;
				
			}catch(SQLException erro){
				System.out.println(erro.getMessage());
			}
			
			return false;
		}
		/* (non-Javadoc)
		 * @see rer.persistencia.IEventosDAO#deletar(int)
		 */
		@Override
		public Boolean deletar(int id) {
			// TODO Auto-generated method stub
			try{
				
				query = "DELETE FROM `db_ceirr`.`eventos` WHERE `eventos`.`idEventos` = ?";
				
				preparedStatement = conexao.prepareStatement(query);
				preparedStatement.setInt(1, id);
				
				preparedStatement.executeUpdate();
				
				System.out.println("\nEvento apagado com sucesso");
				
				return true;
				
			}catch(SQLException erro){
				System.out.println(erro.getMessage());
				
				return false;
			}
		}
		/* (non-Javadoc)
		 * @see rer.persistencia.IEventosDAO#listar()
		 */
		@Override
		public List<Evento> listar() {
			// TODO Auto-generated method stub
			eventos = null;
			
			try{
				
				query = "SELECT * FROM db_ceirr.eventos";
				statement = conexao.createStatement();
				resultSet = statement.executeQuery(query);
				
				eventos = new ArrayList<Evento>();
				
				while (resultSet.next()){
					
					evento = new Evento();
					evento.setIdEvento(resultSet.getInt("idEventos"));
					evento.setNomeEvento(resultSet.getString("nomeEvento"));
					evento.setDataEvento(resultSet.getDate("dataEvento"));
					evento.setValorEvento(resultSet.getDouble("valorEvento"));
					evento.setCustoEvento(resultSet.getDouble("custoEvento"));
					
					eventos.add(evento);
					
				}
				
			}catch(SQLException erro){
				System.out.println(erro.getMessage());
			}
			
				try {
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("\n Erro ao fechar o objeto preparedStatement.");
			}
				
				
			System.out.println("\nSucesso pesquisa - Eventos");
			return eventos;
					
		}
		
		
		
		/* (non-Javadoc)
		 * @see rer.persistencia.IEventosDAO#pesquisarEvento(int)
		 */
		@Override
		public Evento pesquisarEvento(int id) {
			// TODO Auto-generated method stub
			evento = null;
			
			try{
				
				query = "SELECT * FROM db_ceirr.eventos WHERE evento.idEvento = ?";
				preparedStatement = conexao.prepareStatement(query);
				
				preparedStatement.setInt(1, id);
				
				resultSet = preparedStatement.executeQuery();
				
				if (resultSet.next()){
					
					evento = new Evento();
					
					evento.setIdEvento(resultSet.getInt("idTarefas"));
					evento.setNomeEvento(resultSet.getString("nomeTarefa"));
					evento.setDataEvento(resultSet.getDate("dataEvento"));
					evento.setValorEvento(resultSet.getDouble("valorEvento"));
					evento.setCustoEvento(resultSet.getDouble("custoEvento"));
									
				}
				
				return evento;
				
			}catch(SQLException erro){
				System.out.println(erro.getMessage());
			} finally{
			
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					System.out.println("\n Erro ao fechar o objeto preparedStatement.");
				}
			}
			
			System.out.println("\nSucesso pesquisa - Evento");
			
			return null;
		}
		
		

	
}
